# 
# Count number of ratings over all movies that link to each term.
# This is a kind of "term popularity" measure.
#
# Usage:
# ruby term_ratings.rb num_ratings_per_movie <links_by_movie 
#
# num_ratings_by_movie: see Makefile
# links_by_movie: output from term_movies; format is:
#                 term num_pages num_movies movie_id movie_id...
#
# Output format is
# term num_ratings
#

raise "see comments for usage" unless ARGV.size == 1
movie_ratings_file = ARGV[0]

# Read number of ratings for each Netflix movie id.
movie_ratings = Hash[File.open(movie_ratings_file) {|f| f.readlines}.
  map {|l| l.split(' ')}.
  map {|movie, num_ratings| [movie.to_i, num_ratings.to_i]}]

# Read movies for each term; add up number of ratings for each.
term_movies = STDIN.readlines.map {|l| l.split(' ')}.
  each do |term, num_pages, num_movies, *ids|
    term = term.to_i
    ratings = ids.map{|id| movie_ratings[id.to_i]}.inject {|s,x| s+x}
    
    puts "#{term} #{ratings}"
  end

# Copyright (c) 2009 John Lees-Miller
# 
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
# 
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
# 
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.

